package com.example.capsule.service;

import org.springframework.stereotype.Service;

@Service
public class NotificationService {

    private final SmsService smsService;

    public NotificationService(SmsService smsService) {
        this.smsService = smsService;
    }

    /**
     * 发送验证码短信（实际发送）
     */
    public boolean sendVerificationCodeSms(String phone, String code) {
        try {
            // 使用阿里云短信服务发送验证码
            // 注意：sendVerificationCode 方法内部会生成验证码并存储到Redis
            // 所以这里不需要传入code参数
            return smsService.sendVerificationCode(phone);
        } catch (Exception e) {
            System.err.println("发送验证码失败: " + e.getMessage());
            // 模拟发送
            System.out.println("=== 模拟验证码短信 ===");
            System.out.println("手机号: " + phone);
            System.out.println("验证码: " + code);
            System.out.println("==================");
            return true;
        }
    }

    /**
     * 发送自定义内容短信
     */
    public boolean sendCustomSms(String phone, String message) {
        try {
            // 这里可以实现自定义短信内容的发送逻辑
            // 需要根据阿里云短信服务的模板来调整
            System.out.println("=== 发送自定义短信 ===");
            System.out.println("手机号: " + phone);
            System.out.println("内容: " + message);
            System.out.println("==================");
            return true;
        } catch (Exception e) {
            System.err.println("发送自定义短信失败: " + e.getMessage());
            return false;
        }
    }

    /**
     * 发送邮件邀请（模拟）
     */
    public void sendEmailInvitation(String email, String senderName, String inviteUrl) {
        System.out.println("=== 邮件邀请通知 ===");
        System.out.println("收件人: " + email);
        System.out.println("主题: 时光胶囊邀请");
        System.out.println("内容:");
        System.out.println("您好！");
        System.out.println(senderName + "给您发送了一个时光胶囊，邀请您接收。");
        System.out.println("点击以下链接接受邀请：" + inviteUrl);
        System.out.println("此链接7天内有效。");
        System.out.println("如果您没有发送过此请求，请忽略此邮件。");
        System.out.println("==================");
    }

    /**
     * 发送短信邀请（模拟）
     */
    public void sendSmsInvitation(String phone, String senderName, String inviteUrl) {
        String message = senderName + "给您发送了时光胶囊，点击链接接收：" + inviteUrl + "（7天有效）";

        // 尝试发送实际短信
        boolean sent = sendCustomSms(phone, message);

        if (!sent) {
            // 如果发送失败，使用控制台输出
            System.out.println("=== 短信邀请通知 ===");
            System.out.println("手机号: " + phone);
            System.out.println("内容: " + message);
            System.out.println("==================");
        }
    }

    /**
     * 发送实际短信邀请（集成阿里云短信服务）
     */
    public void sendRealSmsInvitation(String phone, String senderName, String inviteUrl) {
        try {
            // 构建短信模板参数
            String templateParam = "{\"sender\":\"" + senderName + "\",\"url\":\"" + inviteUrl + "\"}";

            // 使用阿里云短信服务发送
            // 这里需要根据你的短信模板代码进行调整
            // boolean success = smsService.sendCustomSms(phone, "SMS_INVITATION_TEMPLATE", templateParam);

            System.out.println("发送短信邀请到: " + phone);
            System.out.println("发送者: " + senderName);
            System.out.println("邀请链接: " + inviteUrl);

            // 模拟发送
            sendSmsInvitation(phone, senderName, inviteUrl);

        } catch (Exception e) {
            System.err.println("发送短信邀请失败: " + e.getMessage());
            // 失败时使用模拟发送
            sendSmsInvitation(phone, senderName, inviteUrl);
        }
    }

    /**
     * 发送胶囊解锁通知
     */
    public void sendCapsuleUnlockedNotification(String phone, String capsuleTitle) {
        String message = "您的时光胶囊《" + capsuleTitle + "》已解锁，快来查看吧！";

        boolean sent = sendCustomSms(phone, message);

        if (!sent) {
            System.out.println("=== 胶囊解锁通知 ===");
            System.out.println("手机号: " + phone);
            System.out.println("内容: " + message);
            System.out.println("==================");
        }
    }

    /**
     * 发送邀请接受通知给发送者
     */
    public void sendInvitationAcceptedNotification(String senderPhone, String recipientPhone, String capsuleTitle) {
        String message = recipientPhone + "已接受您的时光胶囊《" + capsuleTitle + "》邀请";

        boolean sent = sendCustomSms(senderPhone, message);

        if (!sent) {
            System.out.println("=== 邀请接受通知 ===");
            System.out.println("发送者手机号: " + senderPhone);
            System.out.println("内容: " + message);
            System.out.println("==================");
        }
    }
}